Modern day computing depends on moving data from place to place. This is true of Internet connected applications, local network applications, and applications co-located on the same computer. It is also true of computing processes on a board within a computer, and it is even true within processors and computer chips within a computer. To get things done, information must be moved, or routed from place to place.
Data is often moved in chunks. A big chunk of data is often called a block. Sometimes systems and applications cannot handle a block of data all at once, or else cannot handle it efficiently. In these situations, the data blocks are broken into smaller chunks for transmission and reassembly after receipt. These smaller chunks are often called packets. A large portion of the information in a packet is the piece that represents part of the data from the data block. A small portion of the information in the packet is for overhead, such as for error correcting information or for delivery routing information. When the packet is assembled, a piece of data is broken off the data block and then combined overhead to form a packet for transmission. The process is reversed upon receipt of the packets. That is, the overhead portions are removed, and the actual data portions of the packets are reassembled into a data block.
Many transmission systems transmit packets in power of two sizes, for instance, 32 byte, 64 byte, or 128 byte packets. Because some small portion of the packet is overhead, and some large portion is a piece from the data block, this means that the actual data part of the packet is almost always a non-power of two size such as 31 bytes, 62 bytes, or 124 bytes. The reason power of two sized data packets are prevalent is that digital data, which is composed of ones and zeros, is governed by principles of base-two or binary numbering. Looking at some simple binary numbers and their decimal equivalents, such as 00001=1, 00010=2, 00100=4, 01000=8, 10000=16, makes it apparent that every time a bit is added to the length of a binary number, its size doubles or increases by a power of two. Similarly, packet transmission sizes are also governed by power of two.
Because the data portion of these packets is a non-power of two size, the large data block will have to be divided into many of these non-power of two sized parcels of data that will be assembled into packets for transmission. Computers are good at dividing and adding, but in order to route packets as fast as possible, especially on the chip level, logic and processes have to be optimized to meet circuit timing requirements. This can be difficult when division by a non-power of two sized number is required, because it requires lots of adding, which eats up time in the process.
Therefore, a method and/or system that can facilitate the process of breaking a data block into non-power of two sized chunks would be of great value. A method and/or system that could do this and improve timing in methods and/or systems would also be valuable. Embodiments of the present invention provide these advantages.